package com.hy.treeNode;

public class TreeNode {
    /**
     * 二叉树的种类
     * 在我们解题过程中二叉树有两种主要的形式：满二叉树和完全二叉树。
     *
     * 满二叉树
     * 满二叉树：如果一棵二叉树只有度为0的结点和度为2的结点，并且度为0的结点在同一层上，则这棵二叉树为满二叉树。这棵二叉树为满二叉树，也可以说深度为k，有2^k-1个节点的二叉树。
     *
     * 完全二叉树
     * 什么是完全二叉树？
     * 完全二叉树的定义如下：在完全二叉树中，除了最底层节点可能没填满外，其余每层节点数都达到最大值，并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层，则该层包含 1~ 2^(h-1)  个节点。
     *
     * 二叉搜索树
     * 前面介绍的树，都没有数值的，而二叉搜索树是有数值的了，二叉搜索树是一个有序树。
     *
     * 若它的左子树不空，则左子树上所有结点的值均小于它的根结点的值；
     * 若它的右子树不空，则右子树上所有结点的值均大于它的根结点的值；
     * 它的左、右子树也分别为二叉排序树
     *
     * 平衡二叉搜索树
     * 平衡二叉搜索树：又被称为AVL（Adelson-Velsky and Landis）树，且具有以下性质：
     * 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1，并且左右两个子树都是一棵平衡二叉树。
     *
     * 二叉树的存储方式
     * 二叉树可以链式存储，也可以顺序存储。
     *
     * 那么链式存储方式就用指针， 顺序存储的方式就是用数组。
     *
     * 顾名思义就是顺序存储的元素在内存是连续分布的，而链式存储则是通过指针把分布在散落在各个地址的节点串联一起。
     *
     * 二叉树的遍历方式
     * 关于二叉树的遍历方式，要知道二叉树遍历的基本方式都有哪些。
     * 一些同学用做了很多二叉树的题目了，可能知道前中后序遍历，可能知道层序遍历，但是却没有框架。
     * 我这里把二叉树的几种遍历方式列出来，大家就可以一一串起来了。
     *
     * 二叉树主要有两种遍历方式：
     * 深度优先遍历：先往深走，遇到叶子节点再往回走。
     * 广度优先遍历：一层一层的去遍历。
     *
     *
     *
     */
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }

    public TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }


    @Override
    public String toString() {
        return "TreeNode{" +
                "val=" + val +
                ", left=" + left +
                ", right=" + right +
                '}';
    }
}
